<?php
declare (strict_types = 1);

namespace app\home\controller;

use think\Exception;
use think\facade\Cache;
use think\facade\View;
use think\Request;

class Order extends Base
{
    /**
     * 展示订单结算页
     * @return string
     */
   public function getOrderInfo(){
       # 查询信息
       $data = \app\home\business\Order::getOrderInfo();

       return View::fetch('getOrderInfo',['data' => $data]);
   }

    /**
     * 点击提交订单
     */
   public function createOrder(){
       try {
           $address_id = \request()->post('address_id');
           if (!is_numeric($address_id)) {
               throw new Exception('地址错误、请重新选择地址');
           }
           # 查询信息
           $data = \app\home\business\Order::createOrder($address_id);

           return View::fetch('pay',['data' => $data]);
       }catch (Exception $exception) {
           throw new Exception($exception->getMessage());
       }

   }

    /**
     * 去支付
     */
   public function pay(){
       // 防止重复支付 bug
//       前端 =》 按钮禁用
//       后端 => 怎么处理
//        第一次请求、我把订单id放在缓存
       // 第二次请求、判断订单id是否在缓存、如果在、返回订单单正在处理中、
        $order_id = \request()->post('order_id');

        $pay_type = \request()->post('pay_type');
       try {
           if (!is_numeric($order_id)) {
                throw new Exception("支付失败");
           }
           $order_info = \app\common\model\Order::find($order_id);
           # 判断订单状态是否是待发货
           if ($order_info->order_status == 1) {
               throw new Exception("订单已支付、不可重复支付");
           }

           # 判断该订单是否超过支付时间
           # 超过15分钟、不可支付
           if (time() - strtotime($order_info->create_time)  > 900) {
               throw new Exception("订单超时、请重新下单");
           }
           $user_id = session('user_info.id');
           # 第二次请求、判断订单id是否在缓存、如果在、返回订单单正在处理中、
           $is_handle = cache($user_id.$order_id);
           if ($is_handle == 1) {
               throw new Exception("订单单正在处理中");
           }
           # 第一次请求、我把订单id放在缓存
           cache($user_id.$order_id,60);

           # 判断支付方式
           switch ($pay_type){
               case 'alipay':
                   # 支付宝支付
                   # 构造表数据
                   echo '<form name=alipayment action=/plugins/alipay/pagepay/pagepay.php method=post  id="pay">
<input id="WIDout_trade_no" name="WIDout_trade_no" value=" '.$order_info->id.'"/>
<input id="WIDtotal_amount" name="WIDtotal_amount"  value=" '.$order_info->order_amount.' "/>
<input id="WIDsubject" name="WIDsubject" value="品有购商品" />
<input id="WIDbody" name="WIDbody" value="品有购商品下单" />
		</form><script>document.getElementById("pay").submit();</script>';
                   break;
               case 'wechat':
                   # 微信支付
                   break;
               default:
//                   默认用支付宝
                   # 支付宝支付
                   break;
           }


       }catch (\Exception $exception) {
          throw new Exception($exception->getMessage());
       }

   }

}
